# -*- coding: utf-8 -*-

import base
import multiplex
import pontoControle
import registrador
import barramento
import memoria

class Processador:
    
    def __init__(self):
        self.pontos_controle = {}
        self.barramento = barramento.Barramento()
        self._cria_pontos_controle()        
        self._cria_registradores()
        self.memoria = memoria.Memoria(base.TAM_MEMORIA, self.rDados, self.rEnd, self.pontos_controle['s'])
        self.muxA = multiplex.Multiplex([self.pontos_controle['k'], self.pontos_controle['j']],
                                        [self.rDados, self.r0, self.r1, self.pc])
        self.muxB = multiplex.Multiplex([self.pontos_controle['i']],
                                        [self.r2, self.r3])
        self.mux0 = multiplex.Multiplex([self.pontos_controle['l']],
                                        [self.barramento, self.memoria])
            
    def _cria_registradores(self):
        self.r0 = registrador.Registrador(self.barramento, self.pontos_controle['a'])
        self.r1 = registrador.Registrador(self.barramento, self.pontos_controle['b'])
        self.pc = registrador.Registrador(self.barramento, self.pontos_controle['c'])
        self.r2 = registrador.Registrador(self.barramento, self.pontos_controle['d'])
        self.r3 = registrador.Registrador(self.barramento, self.pontos_controle['e'])
        self.ir = registrador.Registrador(self.barramento, self.pontos_controle['f'])
        self.rDados = registrador.Registrador(self.barramento, self.pontos_controle['g'])
        self.rEnd = registrador.Registrador(self.barramento, self.pontos_controle['h'])
        
    def _cria_pontos_controle(self):
        for i in range(0,18):
            k = chr(ord('a') + i)
            self.ponto_controle[k] = pontoControle.PontoControle()    
        